package com.ruoyi.design.viewer;

public class ObserverTest {

    public static void main(String[] args) {

//        /*被观察者*/
//        User xiaoMing = new User("小明");
//
//        /*观察者*/
//        Friend xiaoHong = new Friend("小红");
//        Friend xiaoDong = new Friend("小东");
//
//        /*被观察者维护了 观察者列表 */
//        xiaoMing.addObserver(xiaoHong);
//        xiaoMing.addObserver(xiaoDong);
//
//        xiaoMing.sendMessage("今天真开心");
//        // 小红和小明闹别扭了，小红取消订阅小明的朋友圈
//
//        xiaoMing.removeObserver(xiaoHong);
//        xiaoMing.sendMessage("希望明天也像今天一样开心");


        /** 上面代码其实是不对的，不应该用 User 和 Friend 2 个类来定义。
         * 如果小明订阅小红和小东的朋友圈呢？这样实现比较麻烦，主要是为了分清 观察者 和 被观察者 这 2 个概念，
         * 通过上面的例子应该分清楚了 2 个概念了，
         * 那就可以来看正确的代码，小明、小红、小东他们其实都是观察者和被观察者，
         * 所以我们用 User2 来定义他们就可以，
         * User2 实现了 Observable 和 Observer 接口。
         * */
        FinalUser xiaoMing2 = new FinalUser("明");
        FinalUser xiaoHong2 = new FinalUser("红");
        FinalUser xiaoDong2 = new FinalUser("东");
        xiaoMing2.addObserver(xiaoHong2);
        xiaoMing2.addObserver(xiaoDong2);
        xiaoMing2.sendMessage("今天真开心");
        xiaoMing2.removeObserver(xiaoHong2);
        xiaoMing2.sendMessage("希望明天也像今天一样开心");

        xiaoHong2.addObserver(xiaoMing2);
        xiaoHong2.addObserver(xiaoDong2);
        xiaoHong2.sendMessage("今天和小明吵架了，屏蔽他的朋友圈");

        xiaoDong2.addObserver(xiaoMing2);
        xiaoDong2.addObserver(xiaoHong2);
        xiaoDong2.sendMessage("小明和小红吵架了，夹在中间好尴尬");
    }

}